using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Topology
{
    /// <summary>
    /// <para>Export Topology Errors</para>
    /// <para>Exports the errors and exceptions from a geodatabase topology to the target geodatabase.  All information associated with the errors and exceptions, such as the features referenced by the error or exception, is exported.
    /// Once the errors and exceptions are exported, the feature classes can be accessed using any license level of ArcGIS.  The feature classes can be used with the Select Layer By Location tool and can be shared with other users who do not have access to the topology.</para>
    /// <para>将错误和异常从地理数据库拓扑导出到目标地理数据库。 将导出与错误和异常关联的所有信息，例如错误或异常引用的功能。
    /// 导出错误和异常后，可以使用 ArcGIS 的任何许可级别访问要素类。 要素类可与按位置选择图层工具配合使用，并可与无权访问拓扑的其他用户共享。</para>
    /// </summary>    
    [DisplayName("Export Topology Errors")]
    public class ExportTopologyErrors : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportTopologyErrors()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_topology">
        /// <para>Input Topology</para>
        /// <para>The topology from which the errors will be exported.</para>
        /// <para>将从中导出错误的拓扑。</para>
        /// </param>
        /// <param name="_out_path">
        /// <para>Output Location</para>
        /// <para>The output workspace in which the feature classes will be created. The default is the workspace where the topology is located. If the input is a topology service, the default will be the default geodatabase for the project.</para>
        /// <para>将在其中创建要素类的输出工作空间。默认值为拓扑所在的工作区。如果输入是拓扑服务，则默认为工程的默认地理数据库。</para>
        /// </param>
        /// <param name="_out_basename">
        /// <para>Base Name</para>
        /// <para>The name to prefix to each output feature class. This allows you to specify unique output names when running multiple exports to the same workspace. The default is the topology name.</para>
        /// <para>每个输出要素类的前缀名称。这允许您在运行到同一工作区的多个导出时指定唯一的输出名称。默认值为拓扑名称。</para>
        /// </param>
        public ExportTopologyErrors(object _in_topology, object _out_path, object _out_basename)
        {
            this._in_topology = _in_topology;
            this._out_path = _out_path;
            this._out_basename = _out_basename;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Export Topology Errors";

        public override string CallName => "management.ExportTopologyErrors";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_topology, _out_path, _out_basename, _out_feature_class_points, _out_feature_class_lines, _out_feature_class_polygons];

        /// <summary>
        /// <para>Input Topology</para>
        /// <para>The topology from which the errors will be exported.</para>
        /// <para>将从中导出错误的拓扑。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Topology")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_topology { get; set; }


        /// <summary>
        /// <para>Output Location</para>
        /// <para>The output workspace in which the feature classes will be created. The default is the workspace where the topology is located. If the input is a topology service, the default will be the default geodatabase for the project.</para>
        /// <para>将在其中创建要素类的输出工作空间。默认值为拓扑所在的工作区。如果输入是拓扑服务，则默认为工程的默认地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_path { get; set; }


        /// <summary>
        /// <para>Base Name</para>
        /// <para>The name to prefix to each output feature class. This allows you to specify unique output names when running multiple exports to the same workspace. The default is the topology name.</para>
        /// <para>每个输出要素类的前缀名称。这允许您在运行到同一工作区的多个导出时指定唯一的输出名称。默认值为拓扑名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Base Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_basename { get; set; }


        /// <summary>
        /// <para>Output point features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output point features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class_points { get; set; }


        /// <summary>
        /// <para>Output line features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output line features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class_lines { get; set; }


        /// <summary>
        /// <para>Output polygon features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output polygon features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class_polygons { get; set; }


        public ExportTopologyErrors SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}